package com.kerbores.meeting.biz.permission;

import java.util.Set;

import com.kerbores.meeting.domain.Permission;
import com.kerbores.meeting.domain.Permission.PermissionType;

/**
 * @author Kerbores
 *
 *         Create at 2015年1月11日 下午7:00:19
 */
public interface IPermissionService {

	/**
	 * 检查权限
	 * 
	 * @param userId
	 *            用户id
	 * @param permissionId
	 *            权限id
	 * @return 用户是否有此权限
	 */
	boolean checkPermission(long userId, long permissionId);

	/**
	 * 检查权限
	 * 
	 * @param userId
	 *            用户id
	 * @param permissionKey
	 *            权限定义key
	 * @return 用户是否有此权限
	 */
	boolean checkPermission(long userId, String permissionKey);

	/**
	 * 获取用户的全部权限
	 * 
	 * @param userId
	 *            用户id
	 * @return 权限集合
	 */
	Set<Permission> getAllPermissions(long userId);

	/**
	 * 直接权限
	 * 
	 * @param userId
	 * @return
	 */
	Set<Permission> getDirectPermissions(long userId);

	/**
	 * 获取指定类型权限
	 * 
	 * @param userId
	 *            用户id
	 * @param type
	 *            权限类型
	 * @return
	 */
	Set<Permission> getPermissions(long userId, PermissionType type);

	/**
	 * 职位权限
	 * 
	 * @param userId
	 * @return
	 */
	Set<Permission> getPositionPermissions(long userId);

	/**
	 * 角色权限
	 * 
	 * @param userId
	 * @return
	 */
	Set<Permission> getRolePermissions(long userId);

	/**
	 * 用户URL访问权限
	 * 
	 * @param userId
	 *            用户id
	 * @return
	 */
	Set<Permission> getURLPermissions(long userId);

}
